library(knitr)
library(tidyverse)
library(janitor)
library(lubridate) # because we will probably see some dates
library(here) # more easily access files in your project
library(sf) # working with simple features - geospatial
library(tmap)
library(tidycensus)
bikes = (read.csv(here("data_raw", "202309-capitalbikeshare-tripdata.csv"))) |> clean_names()

racks = st_read((here("data_raw", "Public_Bike_Racks.geojson"))) |> clean_names() 
Reading layer `Public_Bike_Racks' from data source `C:\Users\thistljy\Documents\ds241_final\data_raw\Public_Bike_Racks.geojson' using driver `GeoJSON'
Simple feature collection with 3558 features and 2 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -77.1107 ymin: 38.81903 xmax: -76.91907 ymax: 38.98663
Geodetic CRS:  WGS 84
bike_s = bikes |> slice_sample(n = 100 )
census_api_key("9fc5d3792d3a5e922287c3f4e9995118766d50a2")
To install your API key for use in future sessions, run this function with `install = TRUE`.
v2018 = load_variables(2018, "acs5")
df_censcus=get_acs(geography = "tract",
                  variables=c("vehicles"="B08141_001",
                              "population" = "B01001_001",
                              "public_transportion" = "B08006_008"),
                  state="DC",geometry=TRUE,year=2021) 
Getting data from the 2017-2021 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
Using FIPS code '11' for state 'DC'
plot(df_censcus)

plot(racks)


tmap_mode("view")
tmap mode set to interactive viewing
df_cens=df_censcus %>% 
  select(-moe) %>% 
  pivot_wider(names_from = "variable", 
              values_from = "estimate")|> 
  mutate(pub_pop = public_transportion / population,
         v_pop = vehicles / population)
bike_routes = st_read((here("data_raw", "Signed_Bike_Routes.geojson"))) |> clean_names() 
Reading layer `Signed_Bike_Routes' from data source `C:\Users\thistljy\Documents\ds241_final\data_raw\Signed_Bike_Routes.geojson' using driver `GeoJSON'
Simple feature collection with 1024 features and 37 fields
Geometry type: LINESTRING
Dimension:     XY
Bounding box:  xmin: -77.08773 ymin: 38.8404 xmax: -76.92188 ymax: 38.98634
Geodetic CRS:  WGS 84
df_cens_adj = df_cens |> st_transform(4326)
bike_routes = st_as_sf(bike_routes, crs=st_crs(df_cens_adj))

racks = st_as_sf(racks, crs=st_crs(df_cens_adj))
tm_shape(df_cens) +tm_polygons(c("pub_pop", "v_pop"), alpha=.5) + tm_shape(racks) +tm_symbols(size = 0.01, alpha = 0.5) +   
tm_shape(bike_routes) + tm_lines(col="blue",lwd=1,alpha= 1)

Data Sources:

Public Bike Racks: https://opendata.dc.gov/explore?collection=Dataset&query=Public%20Bike%20Racks Bike Share Data: https://capitalbikeshare.com/system-data Signed Bike Routes: https://opendata.dc.gov/explore?collection=Dataset&query=Bike%20Routes

LS0tDQp0aXRsZTogIkhvdyB0aGUgZmxvdyBvZiB0cmFmZmljIG9mIGNhcnMgY29ycmVsYXRlcyB3aXRoIGJpa2Ugc2hhcmUgZGF0YSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCi0gTG9vayBmb3IgYXJlYXMgdGhhdCBwZW9wbGUgZG8gbm90IHVzZSBjYXJzIGFzIG11Y2ggaW4gDQotIFB1dCBtb3JlIGJpa2VzIGluIHRoZSBhcmVhcyB3aGVyZSB0aGVyZSBhcmUgbGVzcyBwZW9wbGUgY29tbXV0aW5nIHRvIHdvcmsgaW4gY2Fycw0KLSBSZWxhdGlvbiBiZXR3ZWVuIG1vdG9yaXplZCB2ZWhpY2xlcyBhbmQgYmlrZXMNCi0gUGFya2luZyBzcGFjZXMNCi0gTGFzdCBtaWxlDQotIFdoZXJlIGJlc3QgdG8gcGxhY2UgYmlrZSBzdGF0aW9ucyANCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShsdWJyaWRhdGUpICMgYmVjYXVzZSB3ZSB3aWxsIHByb2JhYmx5IHNlZSBzb21lIGRhdGVzDQpsaWJyYXJ5KGhlcmUpICMgbW9yZSBlYXNpbHkgYWNjZXNzIGZpbGVzIGluIHlvdXIgcHJvamVjdA0KbGlicmFyeShzZikgIyB3b3JraW5nIHdpdGggc2ltcGxlIGZlYXR1cmVzIC0gZ2Vvc3BhdGlhbA0KbGlicmFyeSh0bWFwKQ0KbGlicmFyeSh0aWR5Y2Vuc3VzKQ0KYGBgDQoNCmBgYHtyfQ0KYmlrZXMgPSAocmVhZC5jc3YoaGVyZSgiZGF0YV9yYXciLCAiMjAyMzA5LWNhcGl0YWxiaWtlc2hhcmUtdHJpcGRhdGEuY3N2IikpKSB8PiBjbGVhbl9uYW1lcygpDQpgYGANCg0KYGBge3J9DQoNCnJhY2tzID0gc3RfcmVhZCgoaGVyZSgiZGF0YV9yYXciLCAiUHVibGljX0Jpa2VfUmFja3MuZ2VvanNvbiIpKSkgfD4gY2xlYW5fbmFtZXMoKSANCmBgYA0KDQoNCmBgYHtyfQ0KYmlrZV9zID0gYmlrZXMgfD4gc2xpY2Vfc2FtcGxlKG4gPSAxMDAgKQ0KYGBgDQoNCmBgYHtyfQ0KY2Vuc3VzX2FwaV9rZXkoIjlmYzVkMzc5MmQzYTVlOTIyMjg3YzNmNGU5OTk1MTE4NzY2ZDUwYTIiKQ0KDQpgYGANCmBgYHtyfQ0KdjIwMTggPSBsb2FkX3ZhcmlhYmxlcygyMDE4LCAiYWNzNSIpDQpgYGANCg0KYGBge3J9DQpkZl9jZW5zY3VzPWdldF9hY3MoZ2VvZ3JhcGh5ID0gInRyYWN0IiwNCiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcz1jKCJ2ZWhpY2xlcyI9IkIwODE0MV8wMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHVsYXRpb24iID0gIkIwMTAwMV8wMDEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1YmxpY190cmFuc3BvcnRpb24iID0gIkIwODAwNl8wMDgiKSwNCiAgICAgICAgICAgICAgICAgIHN0YXRlPSJEQyIsZ2VvbWV0cnk9VFJVRSx5ZWFyPTIwMjEpIA0KYGBgDQpgYGB7cn0NCnBsb3QoZGZfY2Vuc2N1cykNCnBsb3QocmFja3MpDQoNCmBgYA0KYGBge3J9DQpgYGANCg0KYGBge3J9DQoNCnRtYXBfbW9kZSgidmlldyIpDQoNCmRmX2NlbnM9ZGZfY2Vuc2N1cyAlPiUgDQogIHNlbGVjdCgtbW9lKSAlPiUgDQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSAidmFyaWFibGUiLCANCiAgICAgICAgICAgICAgdmFsdWVzX2Zyb20gPSAiZXN0aW1hdGUiKXw+IA0KICBtdXRhdGUocHViX3BvcCA9IHB1YmxpY190cmFuc3BvcnRpb24gLyBwb3B1bGF0aW9uLA0KICAgICAgICAgdl9wb3AgPSB2ZWhpY2xlcyAvIHBvcHVsYXRpb24pDQoNCg0KDQpgYGANCg0KYGBge3J9DQpiaWtlX3JvdXRlcyA9IHN0X3JlYWQoKGhlcmUoImRhdGFfcmF3IiwgIlNpZ25lZF9CaWtlX1JvdXRlcy5nZW9qc29uIikpKSB8PiBjbGVhbl9uYW1lcygpIA0KYGBgDQoNCg0KYGBge3J9DQpkZl9jZW5zX2FkaiA9IGRmX2NlbnMgfD4gc3RfdHJhbnNmb3JtKDQzMjYpDQpiaWtlX3JvdXRlcyA9IHN0X2FzX3NmKGJpa2Vfcm91dGVzLCBjcnM9c3RfY3JzKGRmX2NlbnNfYWRqKSkNCg0KcmFja3MgPSBzdF9hc19zZihyYWNrcywgY3JzPXN0X2NycyhkZl9jZW5zX2FkaikpDQp0bV9zaGFwZShkZl9jZW5zKSArdG1fcG9seWdvbnMoYygicHViX3BvcCIsICJ2X3BvcCIpLCBhbHBoYT0uNSkgKyB0bV9zaGFwZShyYWNrcykgK3RtX3N5bWJvbHMoc2l6ZSA9IDAuMDEsIGFscGhhID0gMC41KSArICAgDQp0bV9zaGFwZShiaWtlX3JvdXRlcykgKyB0bV9saW5lcyhjb2w9ImJsdWUiLGx3ZD0xLGFscGhhPSAxKQ0KYGBgDQoNCg0KIyBEYXRhIFNvdXJjZXM6DQoNClB1YmxpYyBCaWtlIFJhY2tzOiBodHRwczovL29wZW5kYXRhLmRjLmdvdi9leHBsb3JlP2NvbGxlY3Rpb249RGF0YXNldCZxdWVyeT1QdWJsaWMlMjBCaWtlJTIwUmFja3MNCkJpa2UgU2hhcmUgRGF0YTogaHR0cHM6Ly9jYXBpdGFsYmlrZXNoYXJlLmNvbS9zeXN0ZW0tZGF0YQ0KU2lnbmVkIEJpa2UgUm91dGVzOiBodHRwczovL29wZW5kYXRhLmRjLmdvdi9leHBsb3JlP2NvbGxlY3Rpb249RGF0YXNldCZxdWVyeT1CaWtlJTIwUm91dGVzDQoNCg0K